/**
 * 1992 - 2015
 */
package com.tengtong.duang.commons.base;

/**
 * 一些常用断言，抛出 RuntimeException
 * 
 * @author jai
 *
 */
public class AssertUtils {

	/**
	 * 不能为 null 断言，如果 o == null，则抛出包含 message 的  RuntimeException
	 * 
	 * @param o
	 * @param message
	 * @return        如果不是 null，就返回 o
	 */
	public static Object notNull(Object o, String message){
		if( o == null){
			throw new NullPointerException(message);
		}
		return o;
	}

	/**
	 * 判断 bool 的值是否为  true，如果不为 true 就抛出异常
	 * 
	 * @param bool
	 * @param message
	 */
	public static void isTrue(boolean bool, String message) {
		if(!bool){
			throw new RuntimeException(message);
		}
	}
	
	/**
	 * 非空（不是 null 且长度大于 0）
	 * 
	 * @param str
	 * @return
	 */
	public static boolean hasLength(CharSequence str) {
		return (str != null && str.length() > 0);
	}
	
	/**
	 * 非空（不是 null 且长度大于 0）
	 * 
	 * @param str
	 * @return
	 */
	public static boolean hasLength(String str) {
		return hasLength((CharSequence) str);
	}
	
	/**
	 * 非空（不是 null 且长度大于 0），否则就抛出带 message 信息的异常
	 * 
	 * @param str
	 * @param message
	 * @return
	 */
	public static void hasLength(String str, String message) {
		if(!hasLength((CharSequence) str))
			throw new IllegalArgumentException(message); 
	}
	
	/**
	 * 非空，并且不是由空白字符组成
	 * 
	 * @param str
	 * @return
	 */
	public static boolean hasText(CharSequence str) {
		if (!hasLength(str)) {
			return false;
		}
		int strLen = str.length();
		for (int i = 0; i < strLen; i++) {
			if (!Character.isWhitespace(str.charAt(i))) {
				return true;
			}
		}
		return false;
	}
	
	public static boolean hasText(String text){
		return hasText((CharSequence)text);
	}
	
	public static void hasText(String text, String message) {
		if (!hasText(text)) {
			throw new IllegalArgumentException(message);
		}
	}
	
}
